home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TOTDEMO.ARJ / EXTDEM8.PAS < prev    next >
Pascal/Delphi Source File  |  1991-02-11  |  5KB  |  192 lines

  1. Program ExtendedDemoEight;
  2. {EXTDEM8 - this program shows how to communicate between fields by
  3.            raising signals.}
  4.  
  5. Uses DOS,CRT,
  6.      totFAST, totINPUT, totIO1, totIO2;
  7.  
  8. CONST
  9.   SignalNewDirectory = 1;
  10.   DefaultDirectory: string[5] = 'C:\TP';
  11.  
  12. TYPE
  13. MasterStringIOOBJ = object (StringIOOBJ)
  14.    vLastInput: string;
  15.    {methods}
  16.    constructor Init(X,Y,FieldLen: byte);
  17.    function    ProcessEnter: tAction;                                 VIRTUAL;
  18.    function    Select(K:word; X,Y:byte): tAction;                     VIRTUAL;
  19.    procedure   RaiseSignal(var TheSig:tSignal);                       VIRTUAL;
  20.    procedure   ShutdownSignal(var BaseSig:tSignal);                   VIRTUAL;
  21.    function    Suspend:boolean;                                       VIRTUAL;
  22.    destructor  Done;                                                  VIRTUAL;
  23. end; {MasterStringIOOBJ}
  24.  
  25. SlaveStringIOOBJ = object (StringIOOBJ)
  26.    constructor Init(X,Y,FieldLen: byte);
  27.    procedure   HandleSignal(var BaseSig:tSignal; var NewSig:tSignal); VIRTUAL;
  28.    destructor  Done;                                                  VIRTUAL;
  29. end; {SlaveStringIOOBJ}
  30.  
  31. VAR
  32.   DefDir: MasterStringIOOBJ;
  33.   ProgDir,
  34.   DocDir,
  35.   TPUDir,
  36.   HelpDir: SlaveStringIOOBJ;
  37.   Keys: ControlkeysIOOBJ;
  38.   Manager: FormOBJ;
  39.   Result: tAction;
  40.  
  41. {\\\\\\\\\\\\\\\\\\ OBJECT EXTENSIONS \\\\\\\\\\\\\\\\\\\\\\\\}
  42. constructor MasterStringIOOBJ.Init(X,Y,FieldLen: byte);
  43. {}
  44. begin
  45.    StringIOOBJ.Init(X,Y,FieldLen);
  46. end; {MasterStringIOOBJ.Init}
  47.  
  48. function MasterStringIOOBJ.Select(K:word; X,Y:byte): tAction;
  49. {}
  50. begin
  51.    vLastInput := vInputStr;
  52.    Select := StringIOOBJ.Select(K,X,Y);
  53. end; {MasterStringIOOBJ.Select}
  54.  
  55. function MasterStringIOOBJ.ProcessEnter: tAction;
  56. {}
  57. begin
  58.    if vLastInput <> vInputStr then {need to signal}
  59.       ProcessEnter := Signal
  60.    else
  61.       ProcessEnter := none;
  62. end; {MasterStringIOOBJ.ProcessEnter}
  63.  
  64. procedure MasterStringIOOBJ.RaiseSignal(var TheSig:tSignal); 
  65. {}
  66. begin
  67.    with TheSig do
  68.    begin
  69.       ID := SignalNewDirectory;
  70.       MsgType := length(vInputStr);
  71.       MsgPtr := @vInputStr;
  72.    end;
  73.    vLastInput := vInputStr;
  74. end; {MasterStringIOOBJ.RaiseSignal}
  75.  
  76. procedure MasterStringIOOBJ.ShutdownSignal(var BaseSig:tSignal);
  77. {no data to dispose of}
  78. begin
  79. end; {MasterStringIOOBJ.ShutdownSignal}
  80.  
  81. function MasterStringIOOBJ.Suspend:boolean;
  82. {}
  83. begin
  84.    if vLastInput <> vInputStr then {need to signal}
  85.    begin
  86.       Suspend := false;
  87.       Key.StuffBuffer(13); {Enter}
  88.       Key.StuffBuffer(9);   {Tab}
  89.    end
  90.    else
  91.       Suspend := StringIOOBJ.Suspend;
  92. end; {MasterStringIOOBJ.Suspend}
  93.  
  94. destructor MasterStringIOOBJ.Done;
  95. {}
  96. begin
  97.   StringIOOBJ.Done;
  98. end; {MasterStringIOOBJ.Done}
  99.  
  100. constructor SlaveStringIOOBJ.Init(X,Y,FieldLen: byte);
  101. {}
  102. begin
  103.    StringIOOBJ.Init(X,Y,FieldLen);
  104. end; {SlaveStringIOOBJ.Init}
  105.  
  106. procedure SlaveStringIOOBJ.HandleSignal(var BaseSig:tSignal; var NewSig:tSignal);
  107. {}
  108. var temp:string;
  109. begin
  110.    with BaseSig do
  111.    begin
  112.       if (ID = SignalNewDirectory) and (vInputStr = DefaultDirectory) then 
  113.       begin
  114.          move(MsgPtr^,Temp,succ(MsgType));
  115.          if Temp <> vInputStr then
  116.          begin
  117.             vInputStr := Temp;
  118.             Display(Norm);
  119.          end;
  120.       end;
  121.    end;
  122. end; {SlaveStringIOOBJ.HandleSignal}
  123.  
  124. destructor SlaveStringIOOBJ.Done;
  125. {}
  126. begin
  127.    StringIOOBJ.Done;
  128. end; {SlaveStringIOOBJ.Done}
  129. {\\\\\\\\\\\\\\\\\\ MAIN PROGRAM CODE \\\\\\\\\\\\\\\\\\\\\\\\}
  130.  
  131. procedure InitFields;
  132. {}
  133. begin
  134.    with DefDir do
  135.    begin
  136.       Init(40,5,30);
  137.       SetLabel('Main Turbo Directory');
  138.       SetValue(DefaultDirectory);
  139.       SetRules(EraseDefault);
  140.    end;
  141.    with ProgDir do
  142.    begin
  143.       Init(40,7,30);
  144.       SetLabel('Supplemental Program Directory');
  145.       SetValue(DefaultDirectory);
  146.       SetRules(EraseDefault);
  147.    end;
  148.    with DocDir do
  149.    begin
  150.       Init(40,9,30);
  151.       SetLabel('Documentation Directory');
  152.       SetValue(DefaultDirectory);
  153.       SetRules(EraseDefault);
  154.    end;
  155.    with TPUDir do
  156.    begin
  157.       Init(40,11,30);
  158.       SetLabel('TPU Directory');
  159.       SetValue(DefaultDirectory);
  160.       SetRules(EraseDefault);
  161.    end;
  162.    with HelpDir do
  163.    begin
  164.       Init(40,13,30);
  165.       SetLabel('Help Files Directory');
  166.       SetValue(DefaultDirectory);
  167.       SetRules(EraseDefault);
  168.    end;
  169.    Keys.Init;
  170. end; {InitFields}
  171.  
  172. begin
  173.    InitFields;
  174.       ClrScr;
  175.    Screen.TitledBox(5,3,75,15,76,79,78,2,' Signal Demo ');
  176.    Screen.WriteCenter(25,white,'Press TAB to switch fields and press ESC or F10 to end');
  177.    with Manager do
  178.    begin
  179.       Init;
  180.       AddItem(Keys);
  181.       AddItem(DefDir);
  182.       AddItem(ProgDir);
  183.       AddItem(DocDir);
  184.       AddItem(TPUDir);
  185.       AddItem(HelpDir);
  186.       Result := Go;
  187.       if Result = Finished then
  188.          {install program..}
  189.       else
  190.          {finish};
  191.    end;
  192. end.